package com.cn.delan.core.util.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
/**
 * 输入线程类，利用线程进行非阻塞读取。
 * @author BingGo
 *
 */
public class IThread extends Thread {

	private InputStream in;
	private byte b[];
	private int len;
	/**
	 * 初始化读取线程，默认字节缓存1024字节。
	 * @param in 要进行读取的输入类
	 */
	public IThread(InputStream in){
		this.in = in;
		this.b = new byte[1024];
	}
	/**
	 * 初始化读取线程，设置字节缓存。
	 * @param in 要进行读取的输入类
	 * @param cacheSize 字节缓存大小
	 */
	public IThread(InputStream in,int cacheSize){
		this.in = in;
		this.b = new byte[cacheSize];
	}
	@Override
	public void run(){
		try {
			while((len=in.read(b))!=-1 && !this.isInterrupted()){
				this.readBytes(b,len);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 读取信息后的信息处理，这里进行的处理是将其输出。
	 * 如果需要进行别的处理需要重写该类此方法。
	 * 例如：可以根据读入信息，解析命令进行不同的响应。
	 * @param b 读取到的字节数组
	 * @param len 读取到的信息长度
	 * @throws UnsupportedEncodingException 当编码错误时抛出此异常 
	 */
	protected void readBytes(byte[] b,int len) throws UnsupportedEncodingException{
		String s = new String(b,0,len,"GBK");
		System.out.print(s);
		if(s.trim().equals("quit")){
			this.interrupt();
		}
	}
}
